package letcode;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * 给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出 和为目标值 target  的那 两个 整数，并返回它们的数组下标。
 * 你可以假设每种输入只会对应一个答案。但是，数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。
 *
 * 执行用时：1 ms, 在所有 Java 提交中击败了94.23%的用户
 * 内存消耗：38.5 MB, 在所有 Java 提交中击败了67.21%的用户
 *
 */
public class L01_TwoNumSum {
    public static void main(String[] args) {
        int[] arr = new int[]{3, 2, 4};
        int target = 6;

        System.out.println(Arrays.toString(twoSum(arr, target)));


    }

    public static int[] twoSum(int[] nums, int target) {
        int[] result = new int[]{0, 0};

        int secondTargetIndex = 0;
        int firstTargetNum = 0;
        boolean success = false;
        Set<Integer> numSet = new HashSet<Integer>();
        for(int i=0;i<nums.length;i++) {
            int a = nums[i];
            int b = target - a;
            if(numSet.contains(b)) {
                secondTargetIndex = i;
                firstTargetNum = b;
                success = true;
                break;
            } else {
                numSet.add(a);
            }
        }
        if(success) {
            for(int i=0;i<nums.length;i++) {
                if(nums[i] == firstTargetNum && i != secondTargetIndex) {
                    result[0] = i;
                    result[1] = secondTargetIndex;
                    return result;
                }
            }
        }

        return result;
    }
}
